# app.py
from flask import Flask
from config import Config
from models import db
from routes import api_bp
from utils import failure_response
import os
import logging  # 导入 logging 模块


# --- 1. 应用初始化 ---

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    # 1.1 初始化数据库
    db.init_app(app)

    # 1.2 注册路由蓝图
    app.register_blueprint(api_bp)

    # NEW: 1.2.1 配置日志记录
    # 确保在任何环境中都能看到详细的调试信息
    app.logger.setLevel(logging.DEBUG)

    # 1.3 注册全局错误处理（可选，用于处理404/405等Flask内置错误）
    @app.errorhandler(404)
    def not_found(error):
        # 使用自定义的错误码 40003 来表示资源未找到
        return failure_response(40003, 404)

    return app


# --- 2. 数据库创建与启动 ---

app = create_app()


@app.cli.command("init-db")
def init_db():
    """命令行工具：创建数据库表"""
    with app.app_context():
        db.create_all()
        print("数据库表已成功创建!")


# 启动服务
if __name__ == '__main__':
    # 在应用启动前，检查数据库文件是否存在，如果不存在则创建
    db_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'app.db')
    if not os.path.exists(db_path):
        with app.app_context():
            # 必须在应用上下文内创建表
            db.create_all()
            print("初始化：数据库文件和表已创建。")

    # 保持 debug=False，使用配置的 logger
    app.run(debug=False, port=5000)